// Решение на 50 баллов. Построение графа игры.

#include <iostream>
#include <set>

using namespace std;

struct GState{
  int a, b, c;
  int winCount;
  GState(int x, int y, int z) : a(x), b(y), c(z), winCount(-1) {
    if (b > c) {int t = b; b = c; c = t;}
    if (a > b) {int t = a; a = b; b = t;}
    if (b > c) {int t = b; b = c; c = t;}
  }
  bool operator < (const GState &r) const {
    return a < r.a || 
      a == r.a && b < r.b ||
      a == r.a && b == r.b && c < r.c;
  }

};

set<GState> g;

// количество выигрышных ходов из данного состояния
int winCount(GState s){
  if (s.a == 0) {
    if (s.b != s.c) return 1; else return 2;
  }
  set<GState>::iterator it = g.find(s);
  if (it != g.end()) {
    return it->winCount;
  }
  int answer = 0;       
  // a -> b, a -> c
  for (int i = 1; i <= s.a; i++) {
    if (winCount(GState(s.a - i, s.b + i, s.c)) == 0) {
      answer++;
      if (s.a == s.b) answer++;
    }
    if (winCount(GState(s.a - i, s.b, s.c + i)) == 0) {
      answer++;
      if (s.a == s.c) answer++;
    }
  }
  // b -> c
  for (int i = 1; i <= s.b; i++) {
    if (winCount(GState(s.a, s.b - i, s.c + i)) == 0) {
      answer++;
      if (s.b == s.c) {
        answer++;
      }
    }
  }
  s.winCount = answer;
  g.insert(s);
  return answer;
}

int main() {
  int a, b, c;
  cin >> a >> b >> c;

  int winStepCount = winCount(GState(a, b, c));
  if (winStepCount == 0) {
    cout << 2 << endl;
  } else {
    cout << 1 << endl << winStepCount << endl;
  }

  return 0;
}
